home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Full / Paragon Drive Backup 9 / DB90_SE_x32.msi / Data1.cab / _1AD9F7397786BBEA2F9EDC57DE1DCFD6 < prev    next >
Text File  |  2008-06-28  |  14KB  |  433 lines

  1. Incremental Backup
  2.  
  3.  
  4.  
  5. Contents
  6.  
  7. 1. Overview
  8. 2. Incremental Backup
  9.    2.1 N-incremental backup script
  10.    2.2 Intelligent Incremental Backup script
  11. 3. Examples of the scripts for incremental backups
  12.    3.1 N-incremental backup script
  13.    3.2 Intelligent Incremental Backup script
  14. 4. How to execute scripts
  15. 5. Limitations
  16.    5.1 For N-incremental backup script
  17.    5.2 For Intelligent Incremental Backup script
  18.  
  19.  
  20.  
  21. 1. Overview
  22.  
  23. Incremental Backup provides the ability of archiving only those changes in partition's contents,
  24. which were made since its last backup. Such archives usually take much less disk space.
  25.  
  26. To perform the Incremental Backup of a partition, the program requires use a previously made archive
  27. of this partition. The previous backup image is named the Basic Archive or the Basic Backup Image.
  28. The program produces the exact comparison of the previous partition's data (that are saved in the basic
  29. image) with the current ones (that is actually the partition itself). The difference in contents is
  30. saved in the newly created incremental backup archive. An incremental backup archive cannot be used
  31. detached from its basic image.
  32.  
  33. Incremental Backup is currently enabled only for single Primary and Logical partitions.
  34.  
  35.  
  36.  
  37. 2. Incremental Backup
  38.  
  39. As incremental backups should be performed on regular basis, we supose, that resulting script will be scheduled.
  40. We offer you two variants of incremental backups.
  41.  
  42.    2.1 N-incremental Backup script
  43.  
  44. The script creates Basic Archive and then creates N-incremental backup images (value of "N" can be changed)
  45. during subsequent launches. When "N"-incremental backup images are created, the script deletes all archives
  46. (Basic Archive+"N" incremental) and creates new base archive. 
  47.  
  48. Then the cycle repeats.
  49.  
  50.    2.2 Intelligent Incremental Backup script
  51.  
  52. The script doesn't creates Basic Archive, the user should create it manually. During subsequent launches it creates 
  53. incremental backup images while there is enough free space on target partition. When partition is filled up, the script
  54. deletes as many incremental backup images (from a list of oldest) as required for creating new incremental backup.
  55.  
  56.  
  57. 3. Examples of the scripts for incremental backups
  58.  
  59.    3.1 N-incremental Backup script
  60.  
  61. Neccessary variables, which you should customize:
  62.  
  63. *    ndisk - number of disk with which we want to work (0-based numeration of hard disks)
  64. *    npart - number of partition which we want backup (0-based numeration of partitions)
  65. *    nsavedisk - number of disk on which we will backup (0-based numeration of hard disks)
  66. *    nsavepart - number of partition on which we will backup (0-based numeration of partitions)
  67. *    narchs - maximum number of incremental backups
  68. *     "backup.pbf"/"backup" - where "backup" - is the name of backup archive, which can be customized
  69.  
  70. Script body:
  71. =====================================================================================================================
  72. /*
  73. * This script creates incremental backups
  74. * If quantity of incremental backups more than specified number
  75. * than this script deletes all incremental backups and creates
  76. * simple backup
  77. */
  78.  
  79. // Turn off all questions and confirmations
  80. confirm off
  81.  
  82. // Print some text
  83. print "Clever backup of partition"    
  84. print ""
  85.  
  86. /*
  87. * Set some variables:
  88. *    ndisk - number of disk with which we want to work
  89. *    npart - number of partition which we want backup
  90. *    nsavedisk - number of disk on which we will backup
  91. *    nsavepart - number of partition on which we will backup
  92. *    narchs - maximum number of incremental backups
  93. */
  94. set value ndisk = 0
  95. set value npart = 1
  96. set value nsavedisk = 0
  97. set value nsavepart = 2
  98. set value narchs = 10
  99.  
  100.  
  101. // Setting header for filename: "/hard<N1>/partition<N2>/"
  102. set string header = "/hard" + stringdec(value(nsavedisk)) + "/partition"
  103.     + stringdec(value(nsavepart)) + "/"
  104.  
  105. // Sets file counter to 0
  106. set value counter = 0
  107. if (not(fileexist(string(header) + "backup.pbf")))
  108. then
  109.     set value counter = value(narchs)
  110. endif
  111.  
  112. /*
  113. * Next some lines searches latest backup of partition
  114. * We simply check existing of files with
  115. * predefined filenames
  116. */
  117. jump:
  118. if (fileexist(string(header) + "backup" + stringdec(value(counter)) + ".pbf"))
  119. then
  120.     set value counter = value(counter) + 1
  121.     goto jump
  122. endif
  123.  
  124. // Ok, in counter we have number of files
  125. if (value(counter) < value(narchs))
  126. then
  127.     set value need_additional = 0
  128. endif
  129. else
  130.     set value need_additional = 1
  131. endelse
  132.  
  133. if (value(need_additional) != 1)
  134. then
  135.     // Incremental backup
  136.     print "Incremental backup of partition"    
  137.     print ""
  138.     // Select filename for image
  139.     img = string(header) + "backup" + stringdec(value(counter)) + ".pbf"    
  140.     base = string(header) + "backup.pbf"
  141.     unselect all
  142.     select disk value(ndisk)        // Select disk
  143.     select partition value(npart)    // Select partition
  144.     options
  145.     cmp = 1                // Compression = 1
  146.     label = "Incremental backup"    // Label
  147.     increment = ""            // Password to base archive
  148.     autonames            // Create names automatically
  149.     store                // Backup
  150.     call something_do            // Check last operation
  151.  
  152.     apply all                // Apply all scheduled operations
  153.     call something_do            // Check last operation
  154.     goto out                // Exit
  155. endif
  156.  
  157.  
  158. // If we are here we need to do additional backup
  159. // But we need to delete all files before
  160.  
  161. set value counter = 0        // Sets file counter to 0
  162.  
  163. // Delete all files
  164. jump1:
  165. set string name_of_file = string(header) + "backup" + stringdec(value(counter)) + ".pbf"
  166. if (fileexist(string(name_of_file)))
  167. then
  168.     filedelete(string(name_of_file))
  169.     set value counter = value(counter) + 1
  170.     goto jump1
  171. endif
  172.  
  173. print "Additional backup of partition"    
  174. print ""
  175. img = string(header) + "backup.pbf"    // Select filename for image
  176. unselect all
  177. select disk value(ndisk)        // Select disk
  178. select partition value(npart)        // Select partition for backup
  179. options
  180.     cmp = 1                // Compression = 1
  181.     label = "Additional backup"        // Label
  182.     autonames                // Create names automatically
  183. store                    // Backup
  184.  
  185. call something_do            // Check last operation
  186. apply all                    // Apply all scheduled operations
  187. call something_do            // Check last operation
  188. goto out                // Exit
  189.  
  190. something_do:                // Procedure for checking last operation
  191.     if (errorcode(1) != 0)        // If we have error
  192.     then
  193.     print "Some error occured: "    // Print message
  194.     strerror(errorcode(1))        // Print explanation of error
  195.     print ""
  196.     print "Exiting"
  197.     print ""
  198.     exit(errorcode(1))        // Exit from script
  199.     endif
  200. endcall                    // End of procedure
  201.  
  202. out:
  203.     print "************************************** ALL IS OK **************************"
  204.     print ""
  205.     exit(0)
  206. =====================================================================================================================
  207.  
  208. This script can be find into "..Drive Backup 7.0 Server Edition\scripts\Nincremental.psl"
  209.  
  210. After first launch the script creates backup archive "backup.pbf" (or "<name.pbf>" if you set your own name).
  211. During subsequent launches it creates "backup01.pbf", "backup02.pbf".."backup0N.pbf".
  212.  
  213.    3.2 Intelligent Incremental Backup script
  214.  
  215. Neccessary variables, which you should customize:
  216.  
  217. *    ndisk - number of disk with which we want to work (0-based numeration of hard disks)
  218. *    npart - number of partition which we want backup (0-based numeration of partitions)
  219. *    pathb - path to Basic Archive
  220. *    pathi - path to incremental backup
  221.  
  222. Script body:
  223. =====================================================================================================================
  224. /*
  225. Script does new incrementals till there is enough space.
  226. Then deletes the oldest incremental.
  227. */
  228.  
  229. set value ndisk = 0        // source disk number
  230. set value npart = 0        // source partition number
  231. set string pathb = "e:/img.pbf"    // Basic backup image
  232. set string pathi = "e:/incremental"    // Subfolder with incrementals
  233.  
  234. confirm off
  235. if (not(fileexist(string(pathb))))               // Checking for basic backup image
  236. then
  237.    print "Basic image isn't found"
  238.    print ""
  239.    print "Exiting"
  240.    print ""
  241.    exit(1)
  242. endif
  243.  
  244. set value crtime = nowtime
  245. set string funame = "img" + stringdec(value(crtime)) + ".pbf"
  246.  
  247. base = string(pathb)                // Estimating
  248. img = string(pathi)+"/"+string(funame)
  249. unselect all
  250. select disk value(ndisk)
  251. select partition value(npart)
  252. options
  253.    cmp = 1
  254.    label = "Incremental backup"
  255.    increment = ""
  256.    autonames
  257.    estimation (2,tnow)
  258. store
  259. printdec value(tnow)/1024
  260. print " Mb required for incremental backup file"
  261. print ""
  262. for all disks
  263.         for all partitions
  264.                 if (mount(curdisk, curpartition) == substring(string(pathi),0,1))
  265.                 then
  266.                         set variable "tpartition"
  267.                 endif
  268.         endfor
  269. endfor
  270. select partition variable "tpartition"
  271. print stringdec(sizefree(curdisk, curpartition)/1024) +" Mb available"
  272. print ""
  273. set value fsize = value(tnow) - sizefree(curdisk, curpartition)
  274. if (value(fsize) > 0)
  275.  then
  276.   goto free_sp
  277.  endif
  278.                     // Saving incremental
  279. star:
  280. base = string(pathb)
  281. img = string(pathi)+"/"+string(funame)
  282. unselect all
  283. select disk value(ndisk)
  284. select partition value(npart)
  285.  
  286. options
  287.    cmp = 1
  288.    label = "Incremental backup"
  289.    increment = ""
  290.    autonames
  291. store
  292. call check_err
  293. apply all
  294. call check_err
  295. print "Backup is successful:" + string(funame) + " created."
  296. print ""
  297. goto out
  298.  
  299. free_sp:                         // Deleting the oldest incremental
  300. print "Deleting old incremental..."
  301. print ""
  302. once_again:
  303. set string dname = ""
  304. set string fname = ""
  305. set value oldest = 2999999999
  306. set value a = 0
  307. set value b = dircontents(string(pathi))
  308. if (value(b)==0)
  309. then
  310.  goto pipka 
  311. endif
  312.  ark:
  313.  set string fname = direlement(string(pathi),value(a))
  314.  
  315.  if (stringlength(string(fname)) != 17)        //Our files' names are 17 chars long :)
  316.  then
  317.   print "Alien file in the folder !"
  318.   print ""
  319.   goto hohma
  320.  endif
  321.  
  322.  set string tstr = substring(string(fname),3,10)        //Looking for the oldest
  323.  call ss
  324.  if (value(tnew)<value(oldest))
  325.   then
  326.    set string dname = string(fname)
  327.    set value oldest = value(tnew)
  328.   endif
  329.  
  330. hohma:
  331. set value a = value(a) + 1
  332. if (value(a)<value(b))
  333. then
  334.  goto ark
  335. endif
  336.  
  337. pipka:
  338. if (value(oldest)==2999999999)            //If we didn't find any incrementals to delete
  339.  then
  340.    print "Sorry, but there is nothing to delete."
  341.    print ""
  342.    exit(2)
  343.  endif
  344. print string(dname)
  345. print " will be deleted"
  346. print ""
  347.  
  348. set value fsize = value(fsize) - filesize(string(pathi)+"/"+string(dname))
  349.  
  350. filedelete(string(pathi)+"/"+string(dname))            //Deleting incremental and its .pfm
  351. filedelete(string(pathi)+"/img"+stringdec(value(oldest))+".pfm")
  352.  
  353. if (value(fsize) > 0)
  354.  then
  355.   goto once_again
  356.  endif
  357. goto star
  358.                         // Checking for errors procedure
  359.  
  360. check_err:
  361.  if (errorcode(1) != 0)
  362.     then
  363.    print "Some error occured: "
  364.    strerror(errorcode(1))
  365.    print ""
  366.    print "Exiting"
  367.    print ""
  368.    exit(errorcode(1))
  369.     endif
  370. endcall
  371.  
  372.                     // Procedure for converting string into decimal number
  373. // tstr - string, tnew - number.
  374. ss:
  375. set value tnew = 0
  376. set value len = stringlength(string(tstr))
  377. set value z = 1
  378. d:
  379. set value len = value(len) - 1
  380. set value tnew = value(tnew) + ( (chartocode(substring(string(tstr),value(len),1))-48))*value(z)
  381. set value z = value(z)*10
  382. if (value(len)>0)
  383. then
  384. goto d
  385. endif
  386. endcall
  387.  
  388. out:
  389.     print "************************************** ALL IS OK **************************"
  390.     print ""
  391.     exit(0)
  392. =====================================================================================================================
  393.  
  394. This script can be find into "..Drive Backup 7.0 Server Edition\scripts\iincremental.psl"
  395.  
  396. 4. How to schedule scripts
  397.  
  398. There are two ways: you can run them manyally or on regular basis, using scheduled tasks.
  399.  
  400. Manually:
  401. -    open command line prompt ("Start"->"Run"->type "cmd"->"OK")
  402. -    execute following command:
  403.  
  404.      <path_to_scripts.exe>\scripts.exe [-parameters] <path_to_script>\script.psl
  405.  
  406. "scripts.exe" placed where the program executable files are located. For Windows version, they will 
  407. appear in the "\Program" subfolder of the program's installation folder (usually "C:\Program Files\
  408. Paragon Software\Drive Backup 7.0 Server Edition\Program");
  409.  
  410. Scheduled task:
  411.  
  412. Run built-in Windows Scheduler
  413. (Start->Programs->Accessories->System Tools->Scheduled Tasks)
  414.     -    double click "Add Scheduled Task"
  415.     -    click "Next"
  416.     -    in the appeared dialog of choosing program, click "Browse"
  417.     -    find "scripts.exe" ("C:\Program Files\Paragon Software\Drive Backup 7.0 Server Edition\Program\
  418.          scripts.exe")
  419.     -    on the last dialog window, select "Open advanced properties"
  420.     -    in th appeared dialog window, select string "Run", after quotes put a blank and enter name of
  421.          the script.(For example:
  422.          "C:\Program Files\Paragon Software\Drive Backup 7.0 Server Edition\Program\scripts.exe" -Wno --alternate 
  423.          --graph "C:/Program Files/Paragon Software/Drive Backup 7.0 Server Edition/scripts/Nincremental.psl")
  424.  
  425. 5. Limitations
  426.  
  427.    5.1 For N-incremental Backup script
  428.  
  429. 1. You can't use mapped network drive as target partition for incremnental backup script
  430.  
  431.    5.2 For Intelligent Incremental Backup script
  432.  
  433. 1. You can't use mapped network drive as target partition for incremnental backup script